export function debounce<T extends (...args: any[]) => void, This = any>(func: T, delay: number, context?: This): (...args: Parameters<T>) => void {
  let timer: NodeJS.Timeout | null = null; // 定时器

  return function (this: This, ...args: Parameters<T>) {
    const fnContext = context ?? this; // 使用传入的 context 或者当前的 this

    if (timer) {
      clearTimeout(timer);
    } else if (delay <= 0) {
      // 如果延迟时间小于等于0，则立即执行函数
      func.apply(fnContext, args);
      return;
    }

    timer = setTimeout(() => {
      func.apply(fnContext, args);
      timer = null; // 执行完毕后清除定时器
    }, delay);
  };
}


// 创建一个生成唯一id的函数
export function generateUUID(): string {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
    const r = (Math.random() * 16) | 0;
    const v = c === 'x' ? r : (r & 0x3) | 0x8;
    return v.toString(16);
  });
}